package com.yc.cloudvideo.sp_store.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.gson.Gson;
import com.yc.cloudvideo.entity.Store;
import com.yc.cloudvideo.entity.StoreUser;
import com.yc.cloudvideo.entity.User;
import com.yc.cloudvideo.sp_store.mapper.StoreMapper;
import com.yc.cloudvideo.sp_store.mapper.StoreUserMapper;
import com.yc.cloudvideo.sp_store.mapper.UserMapper;
import com.yc.common.bean.Result;
import org.springframework.web.bind.annotation.*;

import org.springframework.stereotype.Controller;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author LYYT
 * @since 2022-08-03
 */
@RestController
@RequestMapping("/cloudvideo/storeUser")
public class StoreUserController {
    @Resource
    private StoreUserMapper storeUserMapper;
    @Resource
    private StoreMapper storeMapper;
    @Resource
    private UserMapper userMapper;
    //根据传过来的uid查询该用户职位是管理员以及以上的仓库
    @PostMapping("selectStoresByUidToGuanLi")
    List<Store> selectStoresByUidToGuanLi(int uid){
        List<Store> stores = storeUserMapper.selectStoresByUidToGuanLi(uid);
        return stores;
    }
    //修改仓库基本信息  名字，状态，介绍
    @PostMapping("updateStoreGuanLi")
    int updateStoreGuanLi(Store store){
        System.out.println(store);
        int i = storeMapper.updateById(store);
        System.out.println("i="+i);
        return i;
    }
    //查询仓库申请列表
    @PostMapping("selectUsersSQ")
    List<StoreUser> selectUsersSQ(int cid){
        List<StoreUser> user = storeUserMapper.selectUsersSQ1(cid);
        return user;
    }
    //改变一条入库申请的状态或者删除它
    @PostMapping("changeOneUserSQ")
    int changeOneUserSQ(int id,boolean agree){
        if(agree){
            StoreUser storeUser=new StoreUser();
            storeUser.setId((long)id);
            storeUser.setLevel(3);
            return storeUserMapper.updateById(storeUser);
        }else {
            return storeUserMapper.deleteById(id);
        }
    }
    //查询仓库中的所有人员，按等级 1  ->  3 排序
    @PostMapping("selectUsersInStoreByCid")
    List<StoreUser> selectUsersInStoreByCid(int cid){
        return storeUserMapper.selectUsersInStoreByCid(cid);
    }
    //仓库成员管理
    @PostMapping("storeManage")
    int storeManage(int id,int level){
        if(level==2||level==3){//修改该人在仓库中的等级
            StoreUser storeUser=new StoreUser();
            storeUser.setId((long)id);
            storeUser.setLevel(level);
            return storeUserMapper.updateById(storeUser);
        }
        //其他情况: level=0,表示踢出仓库
        return storeUserMapper.deleteById(id);
    }

    @PostMapping("selectStore")
    String selectStoreByUid(
            @RequestParam(defaultValue ="-1",value = "choose")int choose,
           int uid
    ){
        LambdaQueryWrapper<StoreUser> lqw=new LambdaQueryWrapper<>();
        lqw.eq(StoreUser::getUid,uid);
//        storeUsers
        final List<StoreUser> storeUsers = storeUserMapper.selectList(lqw);
        List<Long> cids = new ArrayList<>();
        List<Long> uids = new ArrayList<>();
        for (int i = 0; i < storeUsers.size(); i++) {
            cids.add((storeUsers.get(i).getCid()));
        }
//        stores
        List<Store> stores1 = storeMapper.selectBatchIds(cids);
        List<Store> stores = new ArrayList<>();
        for (int i = 0; i < cids.size(); i++) {
            for (int j = 0; j < stores1.size(); j++) {
                if(stores1.get(j).getCid().equals(cids.get(i))){
                    stores.add(stores1.get(j));
                    stores1.remove(j);
                    j--;
                    continue;
                }
            }
        }
//         取出拥有者uid
        LambdaQueryWrapper<StoreUser> lqw2=new LambdaQueryWrapper();
        lqw2.eq(StoreUser::getLevel,1);
        lqw2.in(StoreUser::getCid,cids);
        final List<StoreUser> storeUsers1 = storeUserMapper.selectList(lqw2);
        for (int i = 0; i < storeUsers1.size(); i++) {
                uids.add(storeUsers1.get(i).getUid());
        }
//        user
        final List<User> users1 = userMapper.selectBatchIds(uids);
        List<User> users =new ArrayList<>();
        for (int i = 0; i < uids.size(); i++) {
            for (int j = 0; j < users1.size(); j++) {
                if(users1.get(j).getUid().equals(uids.get(i))){
                    users.add(users1.get(j));
                    continue;
                }
            }
        }
        for (int i = 0; i < stores.size(); i++) {
            //         去掉exist==false 的
            if(stores.get(i).getExist()==false){
                storeUsers.remove(i);
                stores.remove(i);
                users.remove(i);
                i--;
                continue;
            }
            //         去掉level==5 的
            if(storeUsers.get(i).getLevel()==5){
                storeUsers.remove(i);
                stores.remove(i);
                users.remove(i);
                i--;
                continue;
            }
            //        去掉非共有的
            if(choose==1 &&stores.get(i).getOvert()==false){
                storeUsers.remove(i);
                stores.remove(i);
                users.remove(i);
                i--;
                continue;
            }
//            去掉非私有的
            if(choose==2 &&stores.get(i).getOvert()==true){
                storeUsers.remove(i);
                stores.remove(i);
                users.remove(i);
                i--;
                continue;
            }
//            去掉不是自己的
            if(choose==3 &&users.get(i).getUid()!=uid){
                storeUsers.remove(i);
                stores.remove(i);
                users.remove(i);
                i--;
                continue;
            }
            //            去掉是自己的
            if(choose==4 &&users.get(i).getUid()==uid){
                storeUsers.remove(i);
                stores.remove(i);
                users.remove(i);
                i--;
            }
        }

        HashMap<String,Object> map=new HashMap<>();
        map.put("storeUsers",storeUsers);
        map.put("stores",stores);
        map.put("creator",users);
        return new Gson().toJson(map);
    }
}

